/*
 * 文件名称:          BtmHibernateTransactionManagerLookup.java
 * 版权所有@ 2016——2017 无锡聆音科技有限公司，保留所有权利
 * 时间:             2016年7月27日 下午9:21:11
 */

package com.lingyin.database.transaction.hibernate.btm;

import java.util.Properties;

import javax.transaction.Transaction;
import javax.transaction.TransactionManager;

import org.hibernate.HibernateException;
import org.hibernate.transaction.TransactionManagerLookup;

/**
 *   统一处理采用hibernate的jpa时候，对transactionmanager的获取；
 *  在采用其他jta实现的时候，外界可以不关心具体的实现方式。
 *  目前支持的是bitronix的jta实现
 * 
 * @项目        hibernate.database.transaction
 * 
 * @作者:       关宏新
 * 
 * @日期:       2016年7月27日
 * 
 * @负责人:    关宏新
 * 
 * @负责小组:   聆音项目组
 * 
 */
public class BtmHibernateTransactionManagerLookup implements TransactionManagerLookup
{

    /**
     * 获取btm实现的tansactionmanager。
     *@param props 属性
     *@return TransactionManager 获取的TransactionManager对象
     *@throws HibernateException hibernate异常
     */
    public TransactionManager getTransactionManager(Properties props) throws HibernateException
    {
        try
        {
            return bitronix.tm.TransactionManagerServices.getTransactionManager();
            //Class clazz = Class.forName("bitronix.tm.TransactionManagerServices");
            //return (TransactionManager)clazz.getMethod("getTransactionManager", null).invoke(null, null);
        }
        catch(Exception e)
        {
            throw new HibernateException("Could not obtain BTM transaction manager instance", e);
        }
        //return null;
    }

    /**
     * btm实现默认的名字为"java:comp/UserTransaction"
     * @return String 定义的名字
     */
    public String getUserTransactionName()
    {
        return "java:comp/UserTransaction";
    }

    /**
     * @param transaction 获取的对象
     * @return Object 获取的对象
     */
    public Object getTransactionIdentifier(Transaction transaction)
    {
        return transaction;
    }
}
